package com.ruoyi.collect.engine.client;

import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import java.util.Map;

/**
 * MacCMS API response structure
 * Compatible with MacCMS JSON and XML response format
 *
 * @author ruoyi
 * @date 2025-11-07
 */
@JsonIgnoreProperties(ignoreUnknown = true)
public class MacCmsResponse {

    /** Response code */
    private Integer code;

    /** Response message */
    private String msg;

    /** Page info (nested object format - for some APIs) */
    private PageInfo page;

    /** Page number (flat format - for guangsu/wujin APIs) */
    @JsonProperty("page")
    private String pageStr;

    /** Page count (flat format - for guangsu/wujin APIs) */
    private Integer pagecount;

    /** Type list */
    @JsonProperty("class")
    @JsonAlias({"type", "class"})
    private List<TypeInfo> typeList;

    /** Vod list */
    @JsonProperty("list")
    private List<VodInfo> list;

    /** Total count (for some APIs) */
    private Integer total;

    /** Limit (for some APIs) */
    private Integer limit;

    /**
     * Page info
     */
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class PageInfo {
        private Integer page;
        private Integer pagecount;
        private Integer pagesize;
        private Integer recordcount;

        // Getters and setters
        public Integer getPage() {
            return page;
        }

        public void setPage(Integer page) {
            this.page = page;
        }

        public Integer getPagecount() {
            return pagecount;
        }

        public void setPagecount(Integer pagecount) {
            this.pagecount = pagecount;
        }

        public Integer getPagesize() {
            return pagesize;
        }

        public void setPagesize(Integer pagesize) {
            this.pagesize = pagesize;
        }

        public Integer getRecordcount() {
            return recordcount;
        }

        public void setRecordcount(Integer recordcount) {
            this.recordcount = recordcount;
        }
    }

    /**
     * Type info
     */
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class TypeInfo {
        @JsonProperty("type_id")
        @JsonAlias({"type_id", "tid"})
        private String typeId;

        @JsonProperty("type_name")
        @JsonAlias({"type_name", "tname"})
        private String typeName;

        @JsonProperty("type_pid")
        @JsonAlias({"type_pid", "tpid"})
        private String typePid;

        // Getters and setters
        public String getTypeId() {
            return typeId;
        }

        public void setTypeId(String typeId) {
            this.typeId = typeId;
        }

        public String getTypeName() {
            return typeName;
        }

        public void setTypeName(String typeName) {
            this.typeName = typeName;
        }

        public String getTypePid() {
            return typePid;
        }

        public void setTypePid(String typePid) {
            this.typePid = typePid;
        }
    }

    /**
     * Vod info
     */
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class VodInfo {
        @JsonProperty("vod_id")
        @JsonAlias({"vod_id", "id"})
        private String vodId;

        @JsonProperty("vod_name")
        @JsonAlias({"vod_name", "name"})
        private String vodName;

        @JsonProperty("type_id")
        @JsonAlias({"type_id", "tid"})
        private String typeId;

        @JsonProperty("type_name")
        @JsonAlias({"type_name", "type"})
        private String typeName;

        @JsonProperty("vod_en")
        private String vodEn;

        @JsonProperty("vod_sub")
        @JsonAlias({"vod_sub", "sub"})
        private String vodSub;

        @JsonProperty("vod_letter")
        @JsonAlias({"vod_letter", "letter"})
        private String vodLetter;

        @JsonProperty("vod_time")
        @JsonAlias({"vod_time", "time"})
        private String vodTime;

        @JsonProperty("vod_pic")
        @JsonAlias({"vod_pic", "pic"})
        private String vodPic;

        @JsonProperty("vod_pic_thumb")
        @JsonAlias({"vod_pic_thumb", "pic_thumb"})
        private String vodPicThumb;

        @JsonProperty("vod_pic_slide")
        @JsonAlias({"vod_pic_slide", "pic_slide"})
        private String vodPicSlide;

        @JsonProperty("vod_pic_screenshot")
        private String vodPicScreenshot;

        @JsonProperty("vod_area")
        @JsonAlias({"vod_area", "area"})
        private String vodArea;

        @JsonProperty("vod_lang")
        @JsonAlias({"vod_lang", "lang"})
        private String vodLang;

        @JsonProperty("vod_year")
        @JsonAlias({"vod_year", "year"})
        private String vodYear;

        @JsonProperty("vod_remarks")
        @JsonAlias({"vod_remarks", "note", "remarks"})
        private String vodRemarks;

        @JsonProperty("vod_actor")
        @JsonAlias({"vod_actor", "actor"})
        private String vodActor;

        @JsonProperty("vod_director")
        @JsonAlias({"vod_director", "director"})
        private String vodDirector;

        @JsonProperty("vod_writer")
        @JsonAlias({"vod_writer", "writer"})
        private String vodWriter;

        @JsonProperty("vod_producer")
        private String vodProducer;

        @JsonProperty("vod_content")
        @JsonAlias({"vod_content", "content", "des"})
        private String vodContent;

        @JsonProperty("vod_play_from")

        private String vodPlayFrom;

        @JsonProperty("vod_play_server")
        @JsonAlias({"vod_play_server", "play_server"})
        private String vodPlayServer;

        @JsonProperty("vod_play_url")
        private String vodPlayUrl;

        @JsonProperty("vod_play_note")
        private String vodPlayNote;

        @JsonProperty("vod_down_from")
        private String vodDownFrom;

        @JsonProperty("vod_down_url")
        private String vodDownUrl;

        @JsonProperty("vod_down_note")
        private String vodDownNote;

        @JsonProperty("vod_hits")
        @JsonAlias({"vod_hits", "hits"})
        private Integer vodHits;

        @JsonProperty("vod_hits_day")
        private Integer vodHitsDay;

        @JsonProperty("vod_hits_week")
        private Integer vodHitsWeek;

        @JsonProperty("vod_hits_month")
        private Integer vodHitsMonth;

        @JsonProperty("vod_up")
        private Integer vodUp;

        @JsonProperty("vod_down")
        private Integer vodDown;

        @JsonProperty("vod_score")
        @JsonAlias({"vod_score", "score"})
        private String vodScore;

        @JsonProperty("vod_score_all")
        private String vodScoreAll;

        @JsonProperty("vod_score_num")
        private String vodScoreNum;

        @JsonProperty("vod_serial")
        @JsonAlias({"vod_serial", "serial"})
        private String vodSerial;

        @JsonProperty("vod_total")
        @JsonAlias({"vod_total", "total", "state"})
        private String vodTotal;

        @JsonProperty("vod_status")
        @JsonAlias({"vod_status", "status"})
        private String vodStatus;

        @JsonProperty("vod_tag")
        @JsonAlias({"vod_tag", "tag"})
        private String vodTag;

        @JsonProperty("vod_class")
        @JsonAlias({"vod_class", "class"})
        private String vodClass;

        @JsonProperty("vod_version")
        private String vodVersion;

        @JsonProperty("vod_weekday")
        private String vodWeekday;

        @JsonProperty("vod_duration")
        @JsonAlias({"vod_duration", "duration"})
        private String vodDuration;

        @JsonProperty("vod_douban_id")
        private String vodDoubanId;

        @JsonProperty("vod_douban_score")
        private String vodDoubanScore;

        @JsonProperty("vod_blurb")
        private String vodBlurb;

        @JsonProperty("vod_state")
        private String vodState;

        @JsonProperty("vod_rel_vod")
        private String vodRelVod;

        @JsonProperty("vod_rel_art")
        private String vodRelArt;

        // Additional dynamic properties
        private Map<String, Object> additionalProperties;

        // Getters and setters
        public String getVodId() {
            return vodId;
        }

        public void setVodId(String vodId) {
            this.vodId = vodId;
        }

        public String getVodName() {
            return vodName;
        }

        public void setVodName(String vodName) {
            this.vodName = vodName;
        }

        public String getTypeId() {
            return typeId;
        }

        public void setTypeId(String typeId) {
            this.typeId = typeId;
        }

        public String getTypeName() {
            return typeName;
        }

        public void setTypeName(String typeName) {
            this.typeName = typeName;
        }

        public String getVodEn() {
            return vodEn;
        }

        public void setVodEn(String vodEn) {
            this.vodEn = vodEn;
        }

        public String getVodSub() {
            return vodSub;
        }

        public void setVodSub(String vodSub) {
            this.vodSub = vodSub;
        }

        public String getVodLetter() {
            return vodLetter;
        }

        public void setVodLetter(String vodLetter) {
            this.vodLetter = vodLetter;
        }

        public String getVodTime() {
            return vodTime;
        }

        public void setVodTime(String vodTime) {
            this.vodTime = vodTime;
        }

        public String getVodPic() {
            return vodPic;
        }

        public void setVodPic(String vodPic) {
            this.vodPic = vodPic;
        }

        public String getVodPicThumb() {
            return vodPicThumb;
        }

        public void setVodPicThumb(String vodPicThumb) {
            this.vodPicThumb = vodPicThumb;
        }

        public String getVodPicSlide() {
            return vodPicSlide;
        }

        public void setVodPicSlide(String vodPicSlide) {
            this.vodPicSlide = vodPicSlide;
        }

        public String getVodPicScreenshot() {
            return vodPicScreenshot;
        }

        public void setVodPicScreenshot(String vodPicScreenshot) {
            this.vodPicScreenshot = vodPicScreenshot;
        }

        public String getVodArea() {
            return vodArea;
        }

        public void setVodArea(String vodArea) {
            this.vodArea = vodArea;
        }

        public String getVodLang() {
            return vodLang;
        }

        public void setVodLang(String vodLang) {
            this.vodLang = vodLang;
        }

        public String getVodYear() {
            return vodYear;
        }

        public void setVodYear(String vodYear) {
            this.vodYear = vodYear;
        }

        public String getVodRemarks() {
            return vodRemarks;
        }

        public void setVodRemarks(String vodRemarks) {
            this.vodRemarks = vodRemarks;
        }

        public String getVodActor() {
            return vodActor;
        }

        public void setVodActor(String vodActor) {
            this.vodActor = vodActor;
        }

        public String getVodDirector() {
            return vodDirector;
        }

        public void setVodDirector(String vodDirector) {
            this.vodDirector = vodDirector;
        }

        public String getVodWriter() {
            return vodWriter;
        }

        public void setVodWriter(String vodWriter) {
            this.vodWriter = vodWriter;
        }

        public String getVodProducer() {
            return vodProducer;
        }

        public void setVodProducer(String vodProducer) {
            this.vodProducer = vodProducer;
        }

        public String getVodContent() {
            return vodContent;
        }

        public void setVodContent(String vodContent) {
            this.vodContent = vodContent;
        }

        public String getVodPlayFrom() {
            return vodPlayFrom;
        }

        public void setVodPlayFrom(String vodPlayFrom) {
            this.vodPlayFrom = vodPlayFrom;
        }

        public String getVodPlayServer() {
            return vodPlayServer;
        }

        public void setVodPlayServer(String vodPlayServer) {
            this.vodPlayServer = vodPlayServer;
        }

        public String getVodPlayUrl() {
            return vodPlayUrl;
        }

        public void setVodPlayUrl(String vodPlayUrl) {
            this.vodPlayUrl = vodPlayUrl;
        }

        public String getVodPlayNote() {
            return vodPlayNote;
        }

        public void setVodPlayNote(String vodPlayNote) {
            this.vodPlayNote = vodPlayNote;
        }

        public String getVodDownFrom() {
            return vodDownFrom;
        }

        public void setVodDownFrom(String vodDownFrom) {
            this.vodDownFrom = vodDownFrom;
        }

        public String getVodDownUrl() {
            return vodDownUrl;
        }

        public void setVodDownUrl(String vodDownUrl) {
            this.vodDownUrl = vodDownUrl;
        }

        public String getVodDownNote() {
            return vodDownNote;
        }

        public void setVodDownNote(String vodDownNote) {
            this.vodDownNote = vodDownNote;
        }

        public Integer getVodHits() {
            return vodHits;
        }

        public void setVodHits(Integer vodHits) {
            this.vodHits = vodHits;
        }

        public Integer getVodHitsDay() {
            return vodHitsDay;
        }

        public void setVodHitsDay(Integer vodHitsDay) {
            this.vodHitsDay = vodHitsDay;
        }

        public Integer getVodHitsWeek() {
            return vodHitsWeek;
        }

        public void setVodHitsWeek(Integer vodHitsWeek) {
            this.vodHitsWeek = vodHitsWeek;
        }

        public Integer getVodHitsMonth() {
            return vodHitsMonth;
        }

        public void setVodHitsMonth(Integer vodHitsMonth) {
            this.vodHitsMonth = vodHitsMonth;
        }

        public Integer getVodUp() {
            return vodUp;
        }

        public void setVodUp(Integer vodUp) {
            this.vodUp = vodUp;
        }

        public Integer getVodDown() {
            return vodDown;
        }

        public void setVodDown(Integer vodDown) {
            this.vodDown = vodDown;
        }

        public String getVodScore() {
            return vodScore;
        }

        public void setVodScore(String vodScore) {
            this.vodScore = vodScore;
        }

        public String getVodScoreAll() {
            return vodScoreAll;
        }

        public void setVodScoreAll(String vodScoreAll) {
            this.vodScoreAll = vodScoreAll;
        }

        public String getVodScoreNum() {
            return vodScoreNum;
        }

        public void setVodScoreNum(String vodScoreNum) {
            this.vodScoreNum = vodScoreNum;
        }

        public String getVodSerial() {
            return vodSerial;
        }

        public void setVodSerial(String vodSerial) {
            this.vodSerial = vodSerial;
        }

        public String getVodTotal() {
            return vodTotal;
        }

        public void setVodTotal(String vodTotal) {
            this.vodTotal = vodTotal;
        }

        public String getVodStatus() {
            return vodStatus;
        }

        public void setVodStatus(String vodStatus) {
            this.vodStatus = vodStatus;
        }

        public String getVodTag() {
            return vodTag;
        }

        public void setVodTag(String vodTag) {
            this.vodTag = vodTag;
        }

        public String getVodClass() {
            return vodClass;
        }

        public void setVodClass(String vodClass) {
            this.vodClass = vodClass;
        }

        public String getVodVersion() {
            return vodVersion;
        }

        public void setVodVersion(String vodVersion) {
            this.vodVersion = vodVersion;
        }

        public String getVodWeekday() {
            return vodWeekday;
        }

        public void setVodWeekday(String vodWeekday) {
            this.vodWeekday = vodWeekday;
        }

        public String getVodDuration() {
            return vodDuration;
        }

        public void setVodDuration(String vodDuration) {
            this.vodDuration = vodDuration;
        }

        public String getVodDoubanId() {
            return vodDoubanId;
        }

        public void setVodDoubanId(String vodDoubanId) {
            this.vodDoubanId = vodDoubanId;
        }

        public String getVodDoubanScore() {
            return vodDoubanScore;
        }

        public void setVodDoubanScore(String vodDoubanScore) {
            this.vodDoubanScore = vodDoubanScore;
        }

        public String getVodBlurb() {
            return vodBlurb;
        }

        public void setVodBlurb(String vodBlurb) {
            this.vodBlurb = vodBlurb;
        }

        public String getVodState() {
            return vodState;
        }

        public void setVodState(String vodState) {
            this.vodState = vodState;
        }

        public String getVodRelVod() {
            return vodRelVod;
        }

        public void setVodRelVod(String vodRelVod) {
            this.vodRelVod = vodRelVod;
        }

        public String getVodRelArt() {
            return vodRelArt;
        }

        public void setVodRelArt(String vodRelArt) {
            this.vodRelArt = vodRelArt;
        }

        public Map<String, Object> getAdditionalProperties() {
            return additionalProperties;
        }

        public void setAdditionalProperties(Map<String, Object> additionalProperties) {
            this.additionalProperties = additionalProperties;
        }
    }

    // Main class getters and setters
    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public PageInfo getPage() {
        return page;
    }

    public void setPage(PageInfo page) {
        this.page = page;
    }

    public String getPageStr() {
        return pageStr;
    }

    public void setPageStr(String pageStr) {
        this.pageStr = pageStr;
    }

    public Integer getPagecount() {
        return pagecount;
    }

    public void setPagecount(Integer pagecount) {
        this.pagecount = pagecount;
    }

    public List<TypeInfo> getTypeList() {
        return typeList;
    }

    public void setTypeList(List<TypeInfo> typeList) {
        this.typeList = typeList;
    }

    public List<VodInfo> getList() {
        return list;
    }

    public void setList(List<VodInfo> list) {
        this.list = list;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public Integer getLimit() {
        return limit;
    }

    public void setLimit(Integer limit) {
        this.limit = limit;
    }
}